/* 
 成绩录入

 1 查询成绩
  1 打开页面的调用一个函数  发送请求 获取数据  渲染页面 
 2 修改成绩 
 1 双击 单元格 开始修改
    1 找准元素 score类 再去绑定双击事件- 有些元素 不需要 双击事件 
    2 双击事件触发了 
    3 控制单元格对应的input标签显示 即可 
    4 控制input标签 里面的value 等于 单元格里面的内容 
    5 控制被点击的input标签 获得焦点！！！   focus()
     
  2 失去焦点 结束修改
   1 给input标签绑定 失去焦点事件 (不能使用事件委托了， 因为只有表单标签存在失去焦点事件)
    2 获取到输入框里面的内容，拼接成参数 发送给后端 完成编辑
    3 后端响应 编辑成功 
      1 弹出一个提示
      2 重新获取最新的数据
 */

const tbody = document.querySelector('tbody');

//发送请求获取成绩数据 渲染页面
function getScoreList() {
    axios.get('/score/list').then((result) => {
        // console.log(result);
        // 判断 业务码 是否正确
        if (result.data.code === 0) {
            console.log(result.data.data);
            const obj = result.data.data;
            // 遍历对象 生成html标签
            let html = '';
            for (const key in obj) {
                // key = 属性名
                // obj[key]= 属性值
                // html += `
                // <tr>
                //    <th scope="row">${key}</th>
                //    <td>${obj[key].name}</td>
                //    <td class="score">${obj[key].score[0]}</td>
                //    <td class="score">${obj[key].score[1]}</td>
                //    <td class="score">${obj[key].score[2]}</td>
                //    <td class="score">${obj[key].score[3]}</td>
                //    <td class="score">${obj[key].score[4]}</td>
                // </tr>`;

                // 根据成绩 数组来动态生成 多个td标签
                const tempHTML = obj[key].score.reduce(
                    (h, v, i) =>
                        h + `<td class="score">${v}<input type="text" data-batch ="${i + 1}" data-id="${key}"/></td>`,
                    ''
                );
                // td标签的 拼接成 完整的tr
                html += `
                <tr>
                <th scope="row">${key}</th>
                <td>${obj[key].name}</td>
                ${tempHTML}
                </tr>
                `
            }
            // 把html 渲染出来
            tbody.innerHTML = html;

            const input = document.querySelectorAll('tbody input');  //获取tbody里面所有的input 遍历的方式绑定事件
            input.forEach((input) =>
                input.addEventListener('blur', function (e) {
                    // 绑定失去焦点事件
                    const data = {
                        // 学员id
                        stu_id: input.dataset.id,
                        // 成绩的次数
                        batch: input.dataset.batch,
                        // 分数
                        score: input.value,
                    };

                    // 数据校验 通过了 才允许发送给后端 省略

                    // 发送给后端 完成修改
                    axios.post('/score/entry', data).then((result) => {
                        if (result.data.code === 0) {
                            // 提示
                            toastr.success(result.data.message);
                            // 获取最新数据 渲染
                            getScoreList();
                        }
                    })
                }))
        }
    })

}
getScoreList();

// 给分数 单元格绑定双击事件
tbody.addEventListener('dblclick', function (e) {
    const dom = e.target;
    if (dom.nodeName === 'TD' && dom.classList.contains('score')) {
        // console.log('可以修改');
        const input = dom.querySelector('input');
        input.style.display = 'block';

        // 设置input标签的value 等于当前单元格内的文本
        input.value = dom.innerText;
        // 获得焦点！
        input.focus();
    }
})